Компл.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Числа~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ Компл;
(*============================================================================*
 * НАЗНАЧЕНИЕ: функции комплексной переменной
 *----------------------------------------------------------------------------*
 * ПРИМЕЧАНИЯ: после вызова задачи переменная <Матем.код> может стать # 0,
 * это означает, что ответ задачи содержит не результат вычислений, а
 * особое значение.
 * Источники, ссылки, библиография
 *============================================================================*)
ИСПОЛЬЗУЕТ
  Матем;
ВИД 
  Вещ = Матем.Вещ;            
(* Вид обрабатываемых данных - набор из двух вещ-ных: < действительное,мнимое > *)
  Вид-=НАБОР
          x-,y-:Вещ
        КОН;
ПЕР              (* переменные для комплексных ПОСТоянных *)
  НОЛЬ-   :Вид; (* (0;       0) *)
  ОДИН-   :Вид; (* (1;       0) *)
  МНИМЕД- :Вид; (* (0;       1) *)
  МАКСВЕЩ-:Вид; (* (МАКСВЕЩ; 0) *)
  ПИД2-   :Вид; (* (ПИ/2;    0) *)

  NBS:РЯД 8 ИЗ Вещ; (* для Г-функции *)

(*-оооооооооооооо- опережающие определения/заготовки задач -ооооооооооооооооо-*)

ЗАДАЧА^ знак-(z-:Вид):ЦЕЛ;  
ЗАДАЧА^ обмен-(к1+,к2+:Вид); 

ЗАДАЧА^ алгВид-(x,y:Вещ; к+:Вид);     (* к:=x+i*y         *)
ЗАДАЧА^ тригВид-(r,тета:Вещ; к+:Вид); (* к:=r*exp(i*тета) *)
ЗАДАЧА^ мод-(z-:Вид):Вещ;             (* |z|              *)
ЗАДАЧА^ arg-(z-:Вид):Вещ;             (* arg(z)           *)

ЗАДАЧА^ отр-(z-+:Вид);              (* к:=-z  *)
ЗАДАЧА^ сопр-(z-+:Вид);             (* к:=z*  *)
ЗАДАЧА^ доб-(a-,b-+:Вид);           (* к:=a+b *)
ЗАДАЧА^ выч-(a-,b-+:Вид);           (* к:=a-b *)
ЗАДАЧА^ умн-(a-,b-+:Вид);           (* к:=a*b *)
ЗАДАЧА^ умнВ-(a-:Вид; b:Вещ; к+:Вид); (* к:=a*b *)
ЗАДАЧА^ дел-(a-,b-+:Вид);           (* к:=a/b *)
ЗАДАЧА^ делВ-(a-:Вид; b:Вещ; к+:Вид); (* к:=a/b *)

(*----------------------------------------------------------------------------*
 * Тригонометрические функции
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ sin-(z-+:Вид);      
ЗАДАЧА^ arcsin-(z-+:Вид);
ЗАДАЧА^ cos-(z-+:Вид);      
ЗАДАЧА^ arccos-(z-+:Вид);
ЗАДАЧА^ tg-(z-+:Вид);
ЗАДАЧА^ arctg-(z-+:Вид);   

(*----------------------------------------------------------------------------*
 * Логарифмические, показательные и степенные функции
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ exp-(z-+:Вид);
ЗАДАЧА^ ln-(z-+:Вид);
ЗАДАЧА^ lnГ-(z-+:Вид);                (* к:=ln Г(z) *)
ЗАДАЧА^ степКЦ-(z-:Вид; n:ЦЕЛ; к+:Вид); (* к:=zn *)
ЗАДАЧА^ степКВ-(z-:Вид; x:Вещ; к+:Вид); (* к:=zx *)
ЗАДАЧА^ степКК-(a-,b-+:Вид);          (* к:=ab *)
ЗАДАЧА^ квкор-(z-+:Вид);              (* к:=квкор(z) *)
ЗАДАЧА^ кор-(z-:Вид; m,n:ЦЕЛ; к+:Вид);  (* к:=z(1/n), m=0..n-1 *)

(*----------------------------------------------------------------------------*
 * Гиперболические функции (вещественного и комплексного аргумента)
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ sh-(z-+:Вид);
ЗАДАЧА^ ch-(z-+:Вид);
ЗАДАЧА^ th-(z-+:Вид);
ЗАДАЧА^ Arsh-(z-+:Вид);
ЗАДАЧА^ Arch-(z-+:Вид);
ЗАДАЧА^ Arth-(z-+:Вид);

(*=рррррррррррррррррррррррр= реализация задач =рррррррррррррррррррррррррррррр=*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА знак-(z-:Вид):ЦЕЛ;
УКАЗ
  ЕСЛИ z.x > 0 ТО
    ВОЗВРАТ 1
  АЕСЛИ z.x < 0 ТО
    ВОЗВРАТ -1
  АЕСЛИ z.y > 0 ТО
    ВОЗВРАТ 1
  АЕСЛИ z.y < 0 ТО
    ВОЗВРАТ -1
  ИНАЧЕ
    ВОЗВРАТ 0 
  КОН
КОН знак;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА обмен-(к1+,к2+:Вид);
ПЕР
  врем:Вид;
УКАЗ
  врем:=к1;
  к1:=к2;
  к2:=врем
КОН обмен;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА алгВид-(x,y:Вещ; к+:Вид);
УКАЗ
  к.x:=x;
  к.y:=y
КОН алгВид;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА тригВид-(r,тета:Вещ; к+:Вид);
УКАЗ
  алгВид(r*Матем.cos(тета), r*Матем.sin(тета), к)
КОН тригВид;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА мод-(z-:Вид):Вещ;
УКАЗ
  ВОЗВРАТ Матем.Пифагор(z.x,z.y)
КОН мод;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arg-(z-:Вид):Вещ;
УКАЗ
  ВОЗВРАТ Матем.arctg2(z.y,z.x)
КОН arg;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА отр-(z-+:Вид);
УКАЗ
  алгВид(-z.x, -z.y, к)
КОН отр;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА сопр-(z-+:Вид);
УКАЗ
  алгВид(z.x, -z.y, к)
КОН сопр;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА доб-(a-,b-+:Вид);
УКАЗ
  алгВид(a.x+b.x, a.y+b.y, к)
КОН доб;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА выч-(a-,b-+:Вид);
УКАЗ
  алгВид(a.x-b.x, a.y-b.y, к)
КОН выч;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умн-(a-,b-+:Вид);
УКАЗ
  алгВид(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x, к)
КОН умн;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнВ-(a-:Вид; b:Вещ; к+:Вид);
УКАЗ
  алгВид(a.x*b, a.y*b, к)
КОН умнВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА дел-(a-,b-+:Вид);
ПЕР
  врем:Вещ;
УКАЗ
  ЕСЛИ (b.x = 0) И (b.y = 0) ТО
    Матем.код:=Матем.ПЕРЕПОЛНЕНИЕ;
    к:=МАКСВЕЩ;
    ВОЗВРАТ
  КОН;
  врем:=Матем.кв(b.x)+Матем.кв(b.y);
  алгВид((a.x*b.x+a.y*b.y)/врем, (a.y*b.x-a.x*b.y)/врем, к)
КОН дел;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делВ-(a-:Вид; b:Вещ; к+:Вид);
УКАЗ
  алгВид(a.x/b, a.y/b, к)
КОН делВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА кор-(z-:Вид; m,n:ЦЕЛ; к+:Вид);
(* Задача кор должна вычислить все 'n' корней 'a' изменяя 'm' от 0 до n-1 *)
ПЕР
  r,тета:Вещ;
УКАЗ
  ЕСЛИ (n <= 0) ИЛИ (m < 0) ИЛИ (m >= n) ТО
    Матем.код:=Матем.ВНЕОБЛАСТИ;
    к:=НОЛЬ;
    ВОЗВРАТ
  КОН;
  r:=мод(z);
  тета:=arg(z);
  ЕСЛИ r = 0 ТО
    к:=НОЛЬ
  ИНАЧЕ
    тригВид(Матем.степВВ(r,1/n),Матем.уголВПи((тета+m*Матем.ПИ2)/n),к)
  КОН
КОН кор;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА квкор-(z-+:Вид);
ПЕР
  r,тета:Вещ;
УКАЗ
  r:=мод(z);
  тета:=arg(z);
  ЕСЛИ r = 0 ТО
    к:=НОЛЬ
  ИНАЧЕ
    тригВид(Матем.квкор(r),Матем.уголВПи(0.5*тета),к)
  КОН
КОН квкор;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА cos-(z-+:Вид);
ПЕР
  sinx,cosx,sinhy,coshy:Вещ;
УКАЗ
  Матем.sincos(z.x,sinx,cosx);
  Матем.shch(z.y,sinhy,coshy);  
  алгВид(cosx*coshy,-sinx*sinhy,к)
КОН cos;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА sin-(z-+:Вид);
ПЕР
  sinx,cosx,sinhy,coshy:Вещ;
УКАЗ
  Матем.sincos(z.x,sinx,cosx);
  Матем.shch(z.y,sinhy,coshy);  
  алгВид(sinx*coshy,cosx*sinhy,к)
КОН sin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arctg-(z-+:Вид);
ПЕР
  zx,Yp1,Ym1:Вещ;
УКАЗ
  ЕСЛИ (z.x = 0) И (МОДУЛЬ(z.y) = 1) ТО  (* z = +/- i *)
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    алгВид(0, Матем.знак2(Матем.МАКСВЕЩ,z.y), к);
    ВОЗВРАТ
  КОН;
  zx:=Матем.кв(z.x);
  Yp1:=z.y+1;
  Ym1:=z.y-1;
  алгВид(0.5*(Матем.arctg2(z.x,-Ym1)-Матем.arctg2(-z.x,Yp1)),
         0.25*Матем.ln((zx+Матем.кв(Yp1))/(zx+Матем.кв(Ym1))),
         к)
КОН arctg;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА exp-(z-+:Вид);
ПЕР
  expx:Вещ;
УКАЗ
  expx:=Матем.exp(z.x);
  ЕСЛИ Матем.код = 0 ТО
    алгВид(expx*Матем.cos(z.y), expx*Матем.sin(z.y), к)
  ИНАЧЕ
    алгВид(expx, 0, к)
  КОН
КОН exp;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ln-(z-+:Вид);
ПЕР
  r,тета,lnr:Вещ;
УКАЗ
  r:=мод(z);
  тета:=arg(z);
  lnr:=Матем.ln(r);
  ЕСЛИ Матем.код = 0 ТО
    алгВид(lnr, тета, к)
  ИНАЧЕ
    алгВид(-Матем.МАКСВЕЩ, 0, к)
  КОН
КОН ln;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА степКЦ-(z-:Вид; n:ЦЕЛ; к+:Вид);
ПЕР
  r,тета:Вещ;
УКАЗ
  r:=мод(z);
  тета:=arg(z);
  ЕСЛИ r = 0 ТО
    ЕСЛИ n = 0 ТО
      к:=ОДИН
    АЕСЛИ n > 0 ТО
      к:=НОЛЬ
    ИНАЧЕ
      Матем.код:=Матем.ОСОБЕННОСТЬ;
      к:=МАКСВЕЩ;
    КОН
  ИНАЧЕ
    тригВид(Матем.степВЦ(r,n),Матем.уголВПи(n*тета),к)
  КОН
КОН степКЦ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА степКВ-(z-:Вид; x:Вещ; к+:Вид);
ПЕР
  r,тета:Вещ;
УКАЗ
  r:=мод(z);
  тета:=arg(z);
  ЕСЛИ r = 0 ТО
    ЕСЛИ x = 0 ТО
      к:=ОДИН
    АЕСЛИ x > 0 ТО
      к:=НОЛЬ
    ИНАЧЕ
      Матем.код:=Матем.ОСОБЕННОСТЬ;
      к:=МАКСВЕЩ;
    КОН
  ИНАЧЕ
    тригВид(Матем.степВВ(r,x),Матем.уголВПи(x*тета),к)
  КОН
КОН степКВ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА степКК-(a-,b-+:Вид);
ПЕР
  к1:Вид;
УКАЗ
  ЕСЛИ (a.x = 0) И (a.y = 0) ТО
    ЕСЛИ (b.x = 0) И (b.y = 0) ТО
      к:=ОДИН          (* lim aa = 1 при a -> 0 *)
    ИНАЧЕ
      к:=НОЛЬ          (* 0b = 0, b > 0 *)
    КОН 
  ИНАЧЕ 
    ln(a,к);           (* ab = exp(b*ln(a)) *)
    умн(b,к,к1);       
    exp(к1,к)          
  КОН 
КОН степКК;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА tg-(z-+:Вид);
ПЕР
  sinx2,cosx2,sinhy2,coshy2,врем:Вещ;
УКАЗ
  Матем.sincos(2*z.x,sinx2,cosx2);
  Матем.shch(2*z.y,sinhy2,coshy2);
  ЕСЛИ Матем.код = 0 ТО
    врем:=cosx2+coshy2
  ИНАЧЕ
    врем:=coshy2 
  КОН;
  ЕСЛИ врем # 0 ТО
    алгВид(sinx2/врем,sinhy2/врем,к)
  ИНАЧЕ
    (* z = ПИ/2+k*ПИ *)
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    к:=МАКСВЕЩ
  КОН
КОН tg;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arcsin-(z-+:Вид);
ПЕР
  rp,rm,s,врем,zx2:Вещ;
  b:Вид;
УКАЗ
  алгВид(z.y,-z.x,b);  (* y-i*x *)
  zx2:=2*z.x;
  s:=Матем.кв(z.x)+Матем.кв(z.y)+1;
  rp:=0.5*Матем.квкор(s+zx2);
  rm:=0.5*Матем.квкор(s-zx2);
  врем:=rp+rm;
  алгВид(Матем.arcsin(rp-rm),знак(b)*Матем.ln(врем+Матем.квкор(Матем.кв(врем)-1)),к);
КОН arcsin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА arccos-(z-+:Вид);
ПЕР
  к1:Вид;
УКАЗ
  arcsin(z,к1);  (* ПИ/2-arcsin(z) *)
  выч(ПИД2,к1,к)
КОН arccos;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА sh-(z-+:Вид);
ПЕР
  shx,chx:Вещ;
УКАЗ
  Матем.shch(z.x,shx,chx);
  алгВид(shx*Матем.cos(z.y),chx*Матем.sin(z.y),к)
КОН sh;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ch-(z-+:Вид);
ПЕР
  shx,chx:Вещ;
УКАЗ
  Матем.shch(z.x,shx,chx);
  алгВид(chx*Матем.cos(z.y),shx*Матем.sin(z.y),к)
КОН ch;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА th-(z-+:Вид);
ПЕР
  x2,y2,siny2,cosy2,shx2,chx2,врем:Вещ;
УКАЗ
  x2:=2*z.x;
  y2:=2*z.y;
  Матем.sincos(y2,siny2,cosy2);
  Матем.shch(x2,shx2,chx2);
  ЕСЛИ Матем.код = 0 ТО
    врем:=chx2+cosy2
  ИНАЧЕ
    врем:=chx2 
  КОН;
  ЕСЛИ врем # 0 ТО
    алгВид(shx2/врем, siny2/врем, к)
  ИНАЧЕ
    (* z = i*(ПИ/2+k*ПИ) *)
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    алгВид(0, Матем.МАКСВЕЩ, к)
  КОН
КОН th;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Arsh-(z-+:Вид);
(* arsh(z) = -i*arcsin(i*z) *)
ПЕР
  к1:Вид;
УКАЗ
  умн(МНИМЕД,z,к1);
  arcsin(к1,к);
  умн(МНИМЕД,к,к1);
  отр(к1,к)
КОН Arsh;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Arch-(z-+:Вид);
(* arch(z) = знак(y+i(1-x))*i*arccos(z) где z = x+iY *)
ПЕР
  к1,к2:Вид;
УКАЗ
  arccos(z,к);
  умн(МНИМЕД,к,к1);
  алгВид(z.y, 1-z.x, к2);
  ЕСЛИ знак(к2) = -1 ТО
    отр(к1,к)
  ИНАЧЕ
    к:=к1 
  КОН
КОН Arch;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Arth-(z-+:Вид);
(* arth(z) = -i*arctg(i*z) *)
ПЕР
  к1:Вид;
УКАЗ
  ЕСЛИ (МОДУЛЬ(z.x) = 1) И (z.y = 0) ТО (* z = +/- 1 *)
    Матем.код:=Матем.ОСОБЕННОСТЬ;
    алгВид(Матем.знак2(Матем.МАКСВЕЩ,z.x), 0, к);
  ИНАЧЕ 
    умн(МНИМЕД,z,к1);
    arctg(к1,к);
    умн(МНИМЕД,к,к1);
    отр(к1,к)
  КОН 
КОН Arth;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА lnГприбл(z-+:Вид);
(* Это NBS приближение Г функции в области (9 < Re(z) < 10; 0 < Im(z) < 10). 
 * Другие значения можно получить из: ln Г(z+1) = ln z + ln Г(z) *)
ПЕР
  i:ЦЕЛ;
  степени:РЯД 8 ИЗ Вид;
  врем1,врем2:Вид;
УКАЗ
  ln(z,врем1);                     (* ln(z)                      *)
  алгВид(z.x-0.5, z.y, врем2);     (* z-0.5                      *)
  умн(врем1,врем2,к);              (* (z-0.5)*ln(z)              *)
  выч(к,z,к);                      (* (z-0.5)*ln(z)-z            *)
  к.x:=к.x+0.91893853320467274178; (* (z-0.5)*ln(z)-z+ln(2*ПИ)/2 *)
  врем1:=ОДИН;
  дел(врем1,z,степени[0]);         (* z(-1) *)
  умн(степени[0],степени[0],врем2);(* z(-2) *)
  ОТ i:=1 ДО 7 ВЫП
    умн(степени[i-1],врем2,степени[i]) 
  КОН;
  ОТ i:=7 ДО 0 ПО -1 ВЫП
    алгВид(NBS[i]*степени[i].x, NBS[i]*степени[i].y, врем1);
    доб(к,врем1,к)  
  КОН 
КОН lnГприбл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА lnГ-(z-+:Вид);
ПЕР
  lnZ,к1,к2:Вид;
УКАЗ
  ЕСЛИ (z.x <= 0) И (z.y = 0) ТО
    ЕСЛИ (ЦЕЛЧАСТЬ(z.x-1.D-8)-z.x) = 0 ТО  (* Отрицательное целое? *)
      Матем.код:=Матем.ОСОБЕННОСТЬ;
      к:=МАКСВЕЩ;
      ВОЗВРАТ
    КОН 
  КОН;
  ЕСЛИ z.y < 0 ТО (* III (IV) квадрант? *)
    сопр(z,к1);     (* Отображение во II (I) квадрант *)
    lnГ(к1,к2);     (* Попытаемся вычислить здесь *)
    сопр(к2,к)      (* Обратное отображение *)
  ИНАЧЕ
    ЕСЛИ z.x < 9 ТО  (* за пределами области определения NBS *)
      ln(z,lnZ);
      алгВид(z.x+1, z.y, к1);
      lnГ(к1,к2);
      выч(к2,lnZ,к)
    ИНАЧЕ
      lnГприбл(z,к)  (* область определения NBS: 9 < Re(к) < 10 *)
    КОН 
  КОН 
КОН lnГ;

(*-ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss-*)
УКАЗ
  NBS[0]:= 8.33333333333333D-02;
  NBS[1]:=-2.77777777777778D-03;
  NBS[2]:= 7.93650793650794D-04;
  NBS[3]:=-5.95238095238095D-04;
  NBS[4]:= 8.41750841750842D-04;
  NBS[5]:=-1.91752691752692D-03;
  NBS[6]:= 6.41025641025641D-03;
  NBS[7]:=-2.95506535947712D-02;
  алгВид(Матем.МАКСВЕЩ, 0, МАКСВЕЩ);
  алгВид(0,             0, НОЛЬ);
  алгВид(1,             0, ОДИН);
  алгВид(0,             1, МНИМЕД);
  алгВид(Матем.ПИ/2,    0, ПИД2)
КОН Компл.

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы